/* 该程序显示的是一个可作为线程调用的函数，它可以进行一些简单的计算。
 * computerthread在循环中计算一个0~1的随机数的正弦值，并将结果添加到程序13.5给出的同步总和中。
 * computerthread在每次计算后睡眠一段时间，让其他线程使用CPU。
 * 当另一个线程设置标志时，computethread线程就使用程序13.3中的doneflag终止。
 * */
#include "computethread.h"

#define TEN_MILLION 10000000L

/* ARGSUSED */
void *computethread(void *arg1) {
    // 计算随机部分总和
    int error;
    int localdone = 0;
    struct timespec sleeptime;
    double val;

    sleeptime.tv_sec = 0;
    sleeptime.tv_nsec = TEN_MILLION;    // 10ms

    while (!localdone) {
        // 获取一个0.0～1.0的随机数
        if (error = randsafe(&val)) 
            break;
        if (error = add(sin(val)));
            break;
        if (error = getdone(&localdone))
            break;
        
        // 让其他线程进入
        nanosleep(&sleeptime, NULL);
    }
    seterror(error);
    return NULL;
}
